/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package szerelomuhelynyilvantartas;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Calendar;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

/**
 *
 * @author csatari
 */
public class Munkalap {
    private Szerelő munkaFelvevő;
    private Calendar felvételIdőpont;
    private Autó autó;
    private Tulaj tulajdonos;
    private boolean kifizetve;
    private List<Tétel> tételek = new LinkedList<>();

    public Munkalap(Szerelő munkaFelvevő, Autó autó, Tulaj tulajdonos) throws Exception {
        if(munkaFelvevő == null || autó == null || tulajdonos == null) {
            throw new Exception("Rosszul beállított munkalap");
        }
        this.munkaFelvevő = munkaFelvevő;
        this.autó = autó;
        this.tulajdonos = tulajdonos;
        this.kifizetve = false;
        this.felvételIdőpont = Calendar.getInstance();
    }
    public int getTeljesSzerelésiIdő() {
        int teljesSzerelésiIdő = 0;
        Iterator<Tétel> i=tételek.iterator();
        while(i.hasNext()) {
               teljesSzerelésiIdő += i.next().getSzerelésiIdő();
        }
        return teljesSzerelésiIdő;
    }
    public int getTeljesÁr() {
        int teljesÁr = 0;
        Iterator<Tétel> i=tételek.iterator();
        while(i.hasNext()) {
               teljesÁr += i.next().getÁr();
        }
        return teljesÁr;
    }
    public void mentés() {
        PrintWriter pw = null;
        String fájlNév = tulajdonos.getNév() + "_nyomtathato.txt";
        try {
            pw = new PrintWriter(new File(fájlNév));
            pw.append("Szerelő:\r\nNév:"+munkaFelvevő.getNév()+"\r\nFelvétel dátuma: "+felvételIdőpont.get(Calendar.YEAR) + ". " + 
                    (felvételIdőpont.get(Calendar.MONTH)+1) + ". " + felvételIdőpont.get(Calendar.DAY_OF_MONTH) + ". ");
            if(!kifizetve) {
                pw.append("\r\nKifizetés alatt\r\n\r\n");
            }
            else {
                pw.append("\r\nKifizetve\r\n\r\n");
            }
            
            pw.append("Tulajdonos:\r\nNév: "+tulajdonos.getNév()+"\r\nCím: "
                    +tulajdonos.getCím()+"\r\nTelefonszám: "+tulajdonos.getTelefonszám()+"\r\n\r\n");
            
            pw.append("Autó:\r\nRendszám: "+autó.getRendszám()+"\r\nGyártmány: "
                    +autó.getGyártmány()+"\r\nTípus: "+autó.getTípus()+"\r\nKm-óra állás: "+autó.getKmÓraÁllás()+"\r\n\r\n");
            Iterator<Tétel> i=tételek.iterator();
            int c = 1;
            while(i.hasNext()) {
                Tétel tétel = i.next();
                if(tétel instanceof Alkatrész) {
                    Alkatrész a = (Alkatrész)tétel;
                    pw.append(c+". "+"Alkatrész\t\tNév: "+a.getNév()+"\r\n\t\t\tCikkszám: "+a.getCikkszám()+
                            "\r\n\t\t\tÁr: " + a.getÁr() + "\r\n\r\n");
                }
                else if(tétel instanceof Anyag) {
                    Anyag a = (Anyag)tétel;
                    pw.append(c+". "+"Anyag\t\tNév: " + a.getNév() + "\r\n\t\t\tMennyiség: " + a.getMennyiség() +
                            "\r\n\t\t\tÁr: " + a.getÁr() + "\r\n\r\n");
                }
                else if(tétel instanceof Munkafolyamat) {
                    Munkafolyamat m = (Munkafolyamat)tétel;
                    pw.append(c+". "+"Munkafolyamat\tIdő: " + m.getSzerelésiIdő() + " óra\r\n\t\t\tSzerelő:" +
                            m.getSzerelő().getNév() + "\r\n\t\t\tÁr: "+m.getÁr() + "\r\n\r\n");
                }
                c++;
            }
            pw.append("Teljes szerelési idő: " + getTeljesSzerelésiIdő() + " óra\r\n");
            pw.append("Fizetendő összeg: " + getTeljesÁr() + "\r\n");
            pw.append("Aláírás: ");
        }
        catch(IOException ex) {
            System.out.println("Hiba a fájl írásánál");
        }
        finally {
            if(pw!= null) {
                pw.close();
            }
        }
    }

    public Autó getAutó() {
        return autó;
    }

    public Tulaj getTulajdonos() {
        return tulajdonos;
    }

    public Szerelő getMunkaFelvevő() {
        return munkaFelvevő;
    }

    public Calendar getFelvételIdőpont() {
        return felvételIdőpont;
    }

    public boolean isKifizetve() {
        return kifizetve;
    }

    public void setMunkaFelvevő(Szerelő munkaFelvevő) {
        this.munkaFelvevő = munkaFelvevő;
    }

    public void setFelvételIdőpont(Calendar felvételIdőpont) {
        this.felvételIdőpont = felvételIdőpont;
    }

    public void setAutó(Autó autó) {
        this.autó = autó;
    }

    public void setTulajdonos(Tulaj tulajdonos) {
        this.tulajdonos = tulajdonos;
    }

    public void setTételek(List<Tétel> tételek) {
        this.tételek = tételek;
    }
    public void setTétel(int index,Tétel tétel) {
        tételek.set(index, tétel);
    }
    public void deleteTétel(int index) {
        tételek.remove(index);
    }

    public void setKifizetve(boolean kifizetve) {
        this.kifizetve = kifizetve;
    }
    

    public List<Tétel> getTételek() {
        return tételek;
    }
    public void hozzáad(Munkafolyamat munkafolyamat) {
        tételek.add(munkafolyamat);
    }
    public void hozzáad(Anyag anyag) {
        tételek.add(anyag);
    }
    public void hozzáad(Alkatrész alkatrész) {
        tételek.add(alkatrész);
    }

    @Override
    public String toString() {
        return "Munkalap{" + "munkaFelvev\u0151=" + munkaFelvevő + ", felv\u00e9telId\u0151pont=" + felvételIdőpont
                + ", aut\u00f3=" + autó + ", tulajdonos=" + tulajdonos + ", kifizetve=" + kifizetve + ", t\u00e9telek="
                + tételek + '}';
    }
}
